blog-imageblog-image 
 

Stockage Externe Nextcloud - Tests et performances

 

Nextcloud propose une app de Stockage Externe (external storage) prenant en charge différents protocoles ou services. Souhaitant rendre accessible l’un de mes serveurs de fichiers sous Debian via mon Nextcloud les protocoles que j’ai testés sont :

Le test a été fait entre un serveur Nextcloud (v18.0.4) situé dans un Datacenter (connexion 1000MB/s) et un serveur Debian sur un site distant relié à internet par une SDSL 4Mb/s

Le test a été réalisé en téléchargeant un fichier de 10Mo (suffisant vu mon débit…) localisé sur le serveur Debian et téléchargé au travers d’un montage dans nextcloud via l’app “External Storage” de Nextcloud.

Schéma d’architecture :

Schéma architecture

Configuration de l’app Nextcloud External Storage :

Configuration app Nextcloud External Storage

Test SMB/CIFS et SFTP

Deux protocoles ont été testés : SMB (au travers d’un tunnel OpenVPN) et SFTP.

STFP

SFTP-benchmarkSFTP-benchmark
 

Le montage SFTP donne une vitesse de téléchargement depuis Nextcloud de 80Ko/sec au maximum.

SMB

SMB-benchmarkSMB-benchmark
 

Le montage SMB donne une vitesse de téléchargement depuis Nextcloud de 350Ko/sec au maximum.

Il y a visiblement un problème sur la librairie PHP utilisée pour communiquer avec SFTP, car cette lenteur n’est pas constatée en passant par un client Filezilla par exemple ! Après quelques recherches sur le web, je ne suis pas le seul à l’avoir constaté.

Concennant le protocole SMB, ce n’est vraiment pas optimal, le débit est meilleur mais le téléchargement se fait en saccades et la navigation dans les dossiers n’est pas instantanée, il est même souvent nécessaire de cliquer plusieurs fois sur un dossier pour en afficher le contenu, qui apparaît souvent vide au premier clic, et ce problème d’actualisation/rafraîchissement est également présent en SFTP.

Si vous avez une ligne internet un peu faible comme moi, je vous déconseille l’usage des ces deux protocoles ou alors en dernier recours.

Test Local avec montage SSHFS

Le dernier stockage externe testé est le montage “local”. Le montage local vous rend libre d’utiliser la protocole que vous souhaitez.

Je me suis arrêté sur SSHFS, la raison de ce choix est :

1 seul paquet à installer

 

Protocole SSH donc chiffré, ne nécessitant pas de passer le traffic dans un VPN

 

Protocole connu et éprouvé

 

Fonctionnement clé publique/privée

 

1 seul port à ouvrir

Attention cependant, il ne fut pas si simple de rendre le montage local SSHFS accessible à Nextcloud. En effet votre Nextcloud est exéctué avec des droits spécifiques (ex : www-data…), vous devrez donc indiquer l’UID et le GID correspondant :

sshfs -o uid=XXXX -o gid=XXXX

Par défaut, SSHFS n’autorise pas les utilisateurs autres, que celui qui a effectué le point de montage, à accéder à ce dernier. Vous devez donc impérativement utiliser l’option “allow_other”, si vous montez le système de fichier avec l’utilisateur “root” et que vous souhaitez y accéder avec l’utilisateur www-data par exemple, sinon vous aurez une erreur du type :

impossible d'accéder à '/POINT-DE-MONTAGE/': Permission non accordée

Dans Nextcloud cette erreur de permission générera une erreur PHP de type :

stat(): stat failed for

Si vous montez le répertoire SSHFS avec un autre utilisateur que “root” et que vous souhaitez qd même utiliser l’option “allow_other”, il faudra alors modifier le fichier /etc/fuse.conf :

# Décommentez cette ligne

user_allow_other

La commande de montage ressemblera donc in fine à :

sshfs -o uid=1022 -o gid=1001 -o allow_other user@serveur:/REPDISTANT/ /REPLOCAL

Le résultat est SANS APPEL !! La navigation dans les fichiers est parfaitement fluide (avec une simple SDSL 4Mb !), le téléchargement est tout aussi fluide et atteint plus de 420Ko/sec !!! Du coup c’est pour moi la meilleure solution si vous souhaitez connecter un serveur quelconque à votre Nextcloud.

SSHFS-benchmarkSSHFS-benchmark
 

Attention, n’oubliez pas que dans le cadre d’un stockage externe Nextcloud, votre Nextcloud ne fait que faire la passerelle entre vous et le serveur, votre débit sera donc limité par la vitesse d’upload/download du serveur sur lequel se trouvent physiquement les données.

Enfin, notez que vous pouvez créer des liens de partages même sur un stockage externe ! Nextcloud is amazing :)

NOTE de fin : Le dépôt de fichier n’a pas été étudié dans cet exemple, mais on peut vraisemblablement estimer que les écarts entre les protocoles seront les mêmes. Il y a un problème sur la librairie PHP utilisée pour communiquer avec SFTP car cette lenteur n’est pas constatée en passant par un client Filezilla par exemple.

NOTE 2 : LIMITE : si le partage SSHFS est cassé ou temporairement inacessible, le stockage local est “vide” sur Nextcloud. Il ne semble pas se rafraîchir. Si on le recrée, cela brise les eventuels liens publics créés… je cherche actuellement une solution à cette limite et je viendrai poster ici si je trouve !

Merci à Damien pour avoir mener des tests en parallèle sur MyTinyDC, notamment avec un montage NFS, qui a pu confirmer tous mes essais et notamment les performances SFTP. Merci à la commu Nextcloud !